	function EventListener(){
		var events = {};
		
		this.addListener = function(name, callback) {
			var arr = events[name] || (events[name] = []);
			arr.push(callback);
		};
		
		this.removeListener = function (name, callback) {
			if (!name) {
				events = {};
				return;
			}
			
			if (!callback) {
				events[name] = [];
				return;
			}
			
			var arr = events[name];
			if (arr) {
				for(var i = 0, item; (item = arr[i]) != null; i++) {
					if (item == callback) {
						arr.splice(i, 1);
						return;
					}
				}
			}
		};
		
		this.notifyListener = function(name, data) {
			var arr = events[name];
			
			if (arr) {
				for (var i = 0, callback; (callback = arr[i]) != null; i++) {
					callback.call(null, data);
				}
			}
		};
	}
	
	Tesla.fn.EventListener = EventListener;